package main

import (
	// "log" // 标准库日志包
	// "github.com/rs/zerolog" // 全局配置等
	"encoding/json"
	"errors"
	"fmt"

	"github.com/rs/zerolog"
	"github.com/rs/zerolog/log"
) // 日志功能使用

func main() {
	// // log.Logger // 缺省 logger
	// fmt.Println(zerolog.GlobalLevel(), "###")  // 默认 Trace -1
	// zerolog.SetGlobalLevel(zerolog.ErrorLevel) // globallevel error
	// fmt.Println("~~~~~~~~~~~~~~~~~~~~~~~~~")

	// zerolog.TimeFieldFormat = zerolog.TimeFormatUnixMs // js
	// zerolog.TimestampFieldName = "ttt"
	// zerolog.ErrorFieldName = "e"
	// zerolog.TimeFieldFormat = time.DateTime + "-0700"

	// defalt := log.Logger // 直接使用缺省 logger
	// // defalt.Level(lv1 zerolog.Level) // 不是设置当前logger，而是 create 一个子 logger
	// fmt.Println(defalt.GetLevel(), int(defalt.GetLevel())) // 输出当前日志级别和对应的 int 值
	// log.Trace().Msg("this is a trace message")             // trace 级别的日志
	// log.Debug().Msg("this is a debug message")             // debug 级别的日志
	// log.Info().Msg("this is an info message")              // info 级别的日志
	// log.Warn().Msg("this is a warn message")               // warn 级别的日志
	// log.Error().Msg("this is an error message")            // error 级别的日志
	fmt.Println("~~~~~~~~~~~~~~~~~~~~~")

	child := log.Logger.With().Str("biz", "order").
		// Caller().
		Logger().Level(zerolog.WarnLevel)
	child.Debug().Msg("这是子 logger 发出的 debug 消息")                                                                      // 产生一个 debug 消息级别的消息
	child.Info().Msg("这是子 logger 发出的 info 消息")                                                                        // 产生一个 info 消息级别的消息
	child.Warn().Msg("这是子 logger 发出的 warn 消息")                                                                        // 产生一个 warn 消息级别的消息
	child.Error().Str("school", "zhongguancun").Ints("scores", []int{88, 97, 100}).Msg("child error msg with fields") // 产生一个 error 消息级别的消息
	child.Error().Bool("success", true).Str("school", "nongye").Msg("这是子 logger 发出的 error 消息")                        // 产生一个 error 消息级别的消息
	err := errors.New("这是错误消息")
	child.Error().Err(err).Send() // send Msg("")
	child.Error().Msg(err.Error())
	// child2 := zerolog.New(os.Stdout)             // 默认是-1
	// fmt.Println(child2.GetLevel())
	// child2.Trace().Msg("child2 trace msg")
	fmt.Println("~~~~~~~~~~~~~~~~~~~")
	// 读取文件
	s := `{"level":"error","biz":"order","error":"这是错误消息","time":"2025-08-06T10:15:18+08:00"}`
	var data = make(map[string]any)
	err = json.Unmarshal([]byte(s), &data)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("%T %[1]v\n", data)
}
